

<!DOCTYPE html>
<html>
<head>
    <title>Pilgrim</title>

    <!-- meta -->
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- css -->
    <link rel="stylesheet" href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
    <link rel="stylesheet" href="/static/blog/css/bootstrap.min.css">
    <link rel="stylesheet" href="/static/blog/css/pace.css">
    <link rel="stylesheet" href="/static/blog/css/custom.css">
    <link rel="stylesheet" href="/static/blog/css/highlights/github.css">

    <style>
        span.highlighted {
            color: yellow;
        }
    </style>

    <!-- js -->
    <script src="/static/blog/js/jquery-2.1.3.min.js"></script>
    <script src="/static/blog/js/bootstrap.min.js"></script>
    <script src="/static/blog/js/pace.min.js"></script>
    <script src="/static/blog/js/modernizr.custom.js"></script>
</head>

<body>
<div class="container">
    <header id="site-header">
        <div class="row">
            <div class="col-md-4 col-sm-5 col-xs-8">
                <div class="logo">
                    <h1><a href="/"><b>Pilgrim</b></a></h1>
                </div>
            </div><!-- col-md-4 -->
            <div class="col-md-8 col-sm-7 col-xs-4">
                <nav class="main-nav" role="navigation">
                    <div class="navbar-header">
                        <button type="button" id="trigger-overlay" class="navbar-toggle">
                            <span class="ion-navicon"></span>
                        </button>
                    </div>

                    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                        <ul class="nav navbar-nav navbar-right">
                            <li class="cl-effect-11"><a href="/" data-hover="首页">首页</a></li>
                            <li class="cl-effect-11"><a href="#" data-hover="博客">博客</a></li>
                            <li class="cl-effect-11"><a href="#" data-hover="关于">关于</a></li>
                            <li class="cl-effect-11"><a href="#" data-hover="联系">联系</a></li>
                        </ul>
                    </div><!-- /.navbar-collapse -->
                </nav>
                <div id="header-search-box">
                    <a id="search-menu" href="#"><span id="search-icon" class="ion-ios-search-strong"></span></a>
                    <div id="search-form" class="search-form">
                        <form role="search" method="get" id="searchform" action="/search/">
                            <input type="search" name="q" placeholder="搜索" required>
                            <button type="submit"><span class="ion-ios-search-strong"></span></button>
                        </form>
                    </div>
                </div>
            </div><!-- col-md-8 -->
        </div>
    </header>
</div>
<div class="copyrights">Collect from <a href="#">blog</a></div>
<div class="copyrights">Modified by <a href="#">博客</a></div>

<div class="content-body">
    <div class="container">
        <div class="row">
            <main class="col-md-8">
                
    <article class="post post-2">
        <header class="entry-header">
            <h1 class="entry-title">redis</h1>
            <div class="entry-meta">
                <span class="post-category">
                    <a href="/category/6/">redis</a></span>
                <span class="post-date"><a href="#"><time class="entry-date"
                                                          datetime="2019年8月8日 16:44">2019年8月8日 16:44</time></a></span>
                <span class="post-author"><a href="#">chenjj</a></span>
                <span class="comments-link">
                    <a href="/post/2/#comment-area">2 评论</a></span>
                <span class="views-count"><a href="#">235 阅读</a></span>
            </div>
        </header>
        <div class="entry-content clearfix">
            <p>Redis是内存高速缓存数据库，使用C语言编写,它的数据模型为 key-value
它支持丰富的数据结构(类型)，比如 String  list  hash   set  sorted set。
可持久化(随时把备份到硬盘中一份)，保证了数据安全，减轻数据库的负载，读取速度更快。</p>
<p>应用场景：常规计数: 微博数, 粉丝数，验证码，点赞，查询较为频繁的数据。</p>
<p>快的原因：
redis使用了单线程来处理请求，为什么单线程可以支持如此高的并发呢？主要有如下几点：
1.  纯内存访问：将所有数据都放到内存中,内存响应时间为100纳秒，是redis达到每秒万级别访问的重要基础
2.  非阻塞IO：redis使用epoll作为I/O多路复用技术，redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件，不在网络I/O上浪费过多时间
3.  单线程：避免了线程切换和竞态产生的消耗，简化了数据结构和算法的实现
因此如果某个命令执行时间过长，会造成其他命令阻塞，对redis来说是致命的
1 击穿: 指的是热点key在某个特殊的场景时间内恰好失效了，恰好有大量并发请求过来了，造成DB压力。
如果数据库数据量大并且是高并发的情况下那么就可能会造成数据库压力过大而崩溃
方法：将热点数据设置为永远不过期；或者基于 redis or zookeeper 实现互斥锁，等待第一个请求构建完缓存之后，再释放锁，进而其它请求才能通过该 key 访问数据
 穿透:缓存中查不到再到数据库查数据库也不存在，但是请求量很大导致数据库崩溃。
解决方法：查询不到，也往缓存数据库写入一个空值设置过期时间，有相同的 key 来访问的时候，在缓存失效之前，都可以直接从缓存中取数据。
雪崩：指的是大量缓存集中在一段时间内失效，发生大量的缓存穿透，所有的查询都落在数据库上，造成了缓存雪崩。
解决方法：这个没有完美解决办法，但可以分析用户行为，尽量让失效时间点均匀分布，设置不同的过期时间。
在缓存失效后，通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存，其他线程等待。(跟击穿的第一个方案类似，但是这样是避免不了其它key去查数据库，只能减少查询的次数)
可以通过缓存reload机制，预先去更新缓存，再即将发生大并发访问前手动触发加载缓存
不同的key，设置不同的过期时间，具体值可以根据业务决定，让缓存失效的时间点尽量均</p>
<p>持久化：Redis支持RDB和AOF两种持久化机制，持久化功能有效地避免因进程退出造成的数据丢失问题，当下次重启时利用之前持久化的文件即可实现数 据恢复。</p>
<p>1、  RDB持久化是把当前进程数据生成快照保存到硬盘的过程，触发RDB持久化过程分为手动触发和自动触发。
优点：
RDB是一个紧凑压缩的二进制文件，代表Redis在某个时间点上的数据 快照。非常适用于备份，全量复制等场景。
Redis加载RDB恢复数据远远快于AOF
缺点：1、RDB方式数据没办法做到实时持久化/秒级持久化
RDB文件使用特定二进制格式保存，Redis版本演进过程中有多个格式 的RDB版本，存在老版本Redis服务无法兼容新版RDB格式的问题。
针对RDB不适合实时持久化的问题，Redis提供了AOF持久化方式来解决</p>
<p>2、  AOF持久化：
AOF（append only file）持久化：以独立日志的方式记录每次写命令， 重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用 是解决了数据持久化的实时性，目前已经是Redis持久化的主流方式
优点：AOF可以最大限度保证数据完整性
缺点：与下面的RDB方式相比，相同数据集大小AOF占用空间更大。
如果AOF文件损坏？
AOF文件中可能有一条命令是不完整的，比如发生正在写入的时候断电的这种情况，redis支持重放这样的AOF文件，他会在启动日志中记录错误命令的行数，并在重放时对该行进行忽略。</p>
            <div class="widget-tag-cloud">
                <ul>
                    标签：
                    
                </ul>
            </div>
        </div>
    </article>
    <section class="comment-area" id="comment-area">
        <hr>
        <h3>发表评论</h3>
        <form action="/comment/post/2/" method="post" class="comment-form">
            
            <div class="row">
                <div class="col-md-4">
                    <label for="id_name">名字：</label>
                    <input id="id_name" maxlength="100" name="name" type="text" required />
                    
                </div>
                <div class="col-md-4">
                    <label for="id_email">邮箱：</label>
                    <input id="id_email" maxlength="255" name="email" type="email" required />
                    
                </div>
                <div class="col-md-4">
                    <label for="id_url">URL：</label>
                    <input id="id_url" maxlength="200" name="url" type="url" />
                    
                </div>
                <div class="col-md-12">
                    <label for="id_text">评论：</label>
                    <textarea cols="40" id="id_text" name="text" rows="10" required>
</textarea>
                    
                    <button type="submit" class="comment-btn">发表</button>
                </div>
            </div>    <!-- row -->
        </form>
        <div class="comment-list-panel">
            <h3>评论列表，共 <span>2</span> 条评论</h3>
            <ul class="comment-list list-unstyled">
                
                    <li class="comment-item">
                        <span class="nickname">收到</span>
                        <time class="submit-date"
                              datetime="2019年11月18日 19:29">2019年11月18日 19:29</time>
                        <div class="text">
                            上锁的
                        </div>
                    </li>
                
                    <li class="comment-item">
                        <span class="nickname">地方</span>
                        <time class="submit-date"
                              datetime="2019年11月18日 19:32">2019年11月18日 19:32</time>
                        <div class="text">
                            WDEFGRTHYJKL.;/&#39;
                        </div>
                    </li>
                
            </ul>
        </div>
    </section>

            </main>
            <aside class="col-md-4">
                
    <div class="widget widget-content">
        <h3 class="widget-title">文章目录</h3>
        <div class="toc">
<ul></ul>
</div>

    </div>

                <div class="widget widget-recent-posts">
                    <h3 class="widget-title">最新文章</h3>
                    
                    <ul>
                        
                            <li>
                                <a href="/post/23/">数据分析推荐书籍</a>
                            </li>
                        
                            <li>
                                <a href="/post/32/">提高并发的方法</a>
                            </li>
                        
                            <li>
                                <a href="/post/25/">Python数据结构与算法（几种排序）</a>
                            </li>
                        
                            <li>
                                <a href="/post/21/">下山</a>
                            </li>
                        
                            <li>
                                <a href="/post/19/">cjj</a>
                            </li>
                        
                    </ul>
                </div>
                <div class="widget widget-archives">
                    <h3 class="widget-title">归档</h3>
                    
                    <ul>
                        
                            <li>
                                <a href="/archives/2019/12/">2019
                                    年 12 月</a>
                            </li>
                        
                            <li>
                                <a href="/archives/2019/10/">2019
                                    年 10 月</a>
                            </li>
                        
                            <li>
                                <a href="/archives/2019/8/">2019
                                    年 8 月</a>
                            </li>
                        
                    </ul>
                </div>

                <div class="widget widget-category">
                    <h3 class="widget-title">分类</h3>
                    
                    <ul>
                        
                            <li>
                                <a href="/category/1/">陈俊杰 <span
                                        class="post-count">(3)</span></a>
                            </li>
                        
                            <li>
                                <a href="/category/2/">数据库 <span
                                        class="post-count">(6)</span></a>
                            </li>
                        
                            <li>
                                <a href="/category/3/">消息队列 <span
                                        class="post-count">(3)</span></a>
                            </li>
                        
                            <li>
                                <a href="/category/4/">http、tcp/ip <span
                                        class="post-count">(6)</span></a>
                            </li>
                        
                            <li>
                                <a href="/category/5/">多任务 <span
                                        class="post-count">(3)</span></a>
                            </li>
                        
                            <li>
                                <a href="/category/6/">redis <span
                                        class="post-count">(3)</span></a>
                            </li>
                        
                            <li>
                                <a href="/category/7/">git <span
                                        class="post-count">(1)</span></a>
                            </li>
                        
                            <li>
                                <a href="/category/8/">状态保持 <span
                                        class="post-count">(2)</span></a>
                            </li>
                        
                            <li>
                                <a href="/category/10/">Docker <span
                                        class="post-count">(1)</span></a>
                            </li>
                        
                            <li>
                                <a href="/category/11/">搜索引擎 <span
                                        class="post-count">(2)</span></a>
                            </li>
                        
                            <li>
                                <a href="/category/12/">数据分析 <span
                                        class="post-count">(1)</span></a>
                            </li>
                        
                            <li>
                                <a href="/category/13/">数据结构与算法 <span
                                        class="post-count">(1)</span></a>
                            </li>
                        
                            <li>
                                <a href="/category/14/">markdown语法 <span
                                        class="post-count">(1)</span></a>
                            </li>
                        
                            <li>
                                <a href="/category/15/">非阻塞式IO <span
                                        class="post-count">(3)</span></a>
                            </li>
                        
                    </ul>
                </div>

                <div class="widget widget-tag-cloud">
                    <h3 class="widget-title">标签</h3>
                    
                    <ul>
                        
                            暂无标签！
                        
                    </ul>
                </div>

                <div class="rss">
                    <a href="#">才华撑不起野心，经济撑不起梦想</a>
                </div>
            </aside>
        </div>
    </div>
</div>
<footer id="site-footer">
    <div class="container">
        <div class="row">
            <div class="col-md-12">

                </p>
            </div>
        </div>
    </div>
</footer>

<!-- Mobile Menu -->
<div class="overlay overlay-hugeinc">
    <button type="button" class="overlay-close"><span class="ion-ios-close-empty"></span></button>
    <nav>
        <ul>
            <li><a href="/">首页</a></li>
            <li><a href="#">博客</a></li>
            <li><a href="#">关于</a></li>
            <li><a href="#">联系</a></li>
        </ul>
    </nav>
</div>

<script src="/static/blog/js/script.js"></script>

</body>
</html>
